﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gustozzi.DAL;
using Gustozzi.BL;
namespace WebGustozzi.ModuloVentas
{
    ///<summary>
    ///Nombre	    : wfActualizarProducto
    ///Descripción	: 
    ///               
    ///</summary>
    ///<remarks>
    ///Fecha        Moficado Por        Descripción
    ///07/02/2012               	    Versión inicial
    ///19/02/2012   Marco Pizarro	    Agregar validaciones iniciales
    ///</remarks>
    public partial class wfActualizarProducto : System.Web.UI.Page
    {
        VentasDataEntities contexto =null;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Inicializa();
            }
        }

        protected void imbCerrar_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("../wfPrincipal.aspx");
        }

        public void Inicializa() 
        {
            if (contexto == null)
            {
                contexto = new VentasDataEntities();
            }

            var lista = (from c in contexto.CategoriasProductos
                         select new 
                         {
                             Codigo=c.codigoCategoriaPdto,
                             Nombre=c.descripcion
                         });

            ddlCategorias.DataSource = lista;
            ddlCategorias.DataTextField = "Nombre";
            ddlCategorias.DataValueField = "Codigo";
            ddlCategorias.DataBind();

            var listaUnidades = (from c in contexto.UnidadesMedida
                                 select new
                                 {
                                     Codigo = c.codigoUnidMedida,
                                     Nombre = c.descripcion
                                 });

            ddlUnidadMedida.DataSource = listaUnidades;
            ddlUnidadMedida.DataTextField = "Nombre";
            ddlUnidadMedida.DataValueField = "Codigo";
            ddlUnidadMedida.DataBind();

            EditarControles(false);
        }

        public void EditarControles(Boolean estado)
        {
            this.txtCodigoProducto.Enabled = estado;
            this.imbBuscarProducto.Visible = !estado;
            this.ddlCategorias.Enabled = estado;
            this.ddlUnidadMedida.Enabled = estado;
            this.txtNombre.Enabled = estado;
            this.txtDescripcion.Enabled = estado;
            this.rblEstado.Enabled = estado;
            this.rblEstado.SelectedIndex = 0;
        }

        public void LimpiarCampos()
        {
            this.txtCodigoProducto.Text = "";
            this.txtNombre.Text = "";
            this.txtDescripcion.Text = "";
            this.ddlCategorias.SelectedIndex = 0;
            this.ddlUnidadMedida.SelectedIndex = 0;
        }

        protected void imbGuardar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Guardar();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        public void Guardar() 
        {
            if (txtCodigoProducto.Text.Trim().Equals (String.Empty)) 
            {
                throw new Exception("Genere codigo de Producto.");
            }
            if (ddlCategorias.SelectedIndex <= 0)
            {
                throw new Exception("Seleccione la categoría del producto.");
            }
            if (ddlUnidadMedida.SelectedIndex <= 0)
            {
                throw new Exception("Seleccione la unidad de medida del producto.");
            }
            if (txtNombre.Text.Trim().Equals(String.Empty)) 
            {
                throw new Exception("Ingrese nombre de producto.");
            }
            if (txtDescripcion.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Ingrese descripcion de producto.");
            }

            int codigoProducto = Convert.ToInt32(txtCodigoProducto.Text.Trim());
            string nombre = txtNombre.Text.Trim();
            string descripcion = txtDescripcion.Text.Trim();
            int idCategoria = Convert.ToInt32(ddlCategorias.SelectedValue);
            int idUdM = Convert.ToInt32(ddlUnidadMedida.SelectedValue);

            if (contexto == null) 
            {
                contexto=new VentasDataEntities();
            }
            
            var lstProducto= (from p in contexto.Productos 
                            where p.codigoProducto ==codigoProducto
                            select p);

            Producto oProducto= null;
            bool actualiza = false;
            if (lstProducto != null) 
            {
                if (lstProducto.Count() != 0) 
                {
                    oProducto =(Producto) lstProducto.First();
                    actualiza = true;
                }
            }
            if (!actualiza)
            {
                oProducto = new Producto();
                contexto.AddToProductos(oProducto);
            }

            oProducto.codigoProducto = codigoProducto;
            oProducto.codigoUnidMedida = idUdM;
            oProducto.nombre = nombre;
            oProducto.descripcion = descripcion;
            oProducto.codigoCategoriaPdto = idCategoria;
            oProducto.estado = rblEstado.SelectedValue;

            ProductoBL oProductoBL = new ProductoBL();
            int rpta=oProductoBL.ActualizaProducto(oProducto,contexto);
            if (rpta == 1)
            {
                lblMsj.Text = "Se guardo satisfactoriamente los datos del producto.";
                lblMsj.ForeColor = System.Drawing.Color.Blue;
                EditarControles(false);
                divMensaje.Visible = true;
                divControlesManten.Visible = true;
                divRegistrar.Visible = false;
            }
            else 
            {
                lblMsj.Text = "Se produjo un error al intentar guardar, cierre y vuelva a intentarlo.";
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        protected void txtCodigoProducto_TextChanged(object sender, EventArgs e)
        {
            try
            {
                CargarProducto();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        public void CargarProducto() 
        {
            if (!txtCodigoProducto.Text.Trim().Equals(String.Empty))
            {
                if (contexto == null) 
                {
                    contexto = new VentasDataEntities();
                }

                int idProducto = Convert.ToInt32(txtCodigoProducto.Text.Trim());

                var lstProducto=(from p in contexto.Productos
                                 where p.codigoProducto ==idProducto 
                                 select p);
                
                if (lstProducto != null) 
                {
                    if (lstProducto.Count() > 0) 
                    {
                        Producto oProducto = lstProducto.First();
                        
                        ddlUnidadMedida.SelectedValue = oProducto.codigoUnidMedida.ToString();
                        txtNombre.Text= oProducto.nombre;
                        txtDescripcion.Text= oProducto.descripcion ;
                        ddlCategorias.SelectedValue= oProducto.codigoCategoriaPdto.ToString() ;
                        rblEstado.SelectedValue = oProducto.estado;
                        return;
                    }
                }
                ddlUnidadMedida.SelectedIndex  = 0 ;
                txtNombre.Text = string.Empty ;
                txtDescripcion.Text = string.Empty;
                ddlCategorias.SelectedIndex = 0;
                rblEstado.SelectedValue = "A";

            }
        }

        protected void imbNuevo_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                LimpiarCampos();
                NuevoRegistro();
                EditarControles(true);
                divControlesManten.Visible = false;
                divRegistrar.Visible = true;
                divMensaje.Visible = false;
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }
        public void NuevoRegistro() 
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities();
            }

            int numeroProducto = (from p in contexto.Productos
                                  select p.codigoProducto).Max();
            numeroProducto += 1;
            txtCodigoProducto.Text = numeroProducto.ToString();

        }

        protected void imbModificar_Click(object sender, ImageClickEventArgs e)
        {
            if (String.IsNullOrEmpty(this.txtCodigoProducto.Text)) {
                lblMsj.Text = "Seleccione el producto a modificar.";
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            } else {
                EditarControles(true);
                this.txtCodigoProducto.Enabled = false;
                divControlesManten.Visible = false;
                divRegistrar.Visible = true;
                divMensaje.Visible = false;
            }
        }

        protected void imbEliminar_Click(object sender, ImageClickEventArgs e)
        {

        }

        protected void imbCancelar_Click(object sender, ImageClickEventArgs e)
        {
            EditarControles(false);
            LimpiarCampos();
            divControlesManten.Visible = true;
            divRegistrar.Visible = false;
            divMensaje.Visible = false;
        }
    }
}